#ifndef PRODUCT_CONFIG_H
#define PRODUCT_CONFIG_H

    #include "freertos/FreeRTOS.h"
    #include "freertos/task.h"

    #define ARCH_OS_NATIVE_PRIORITY_DEFAULT (configMAX_PRIORITIES -1)

	//用户处理时候的OTA任务,优先级最高
	#define TASK_PROP_OTA  	  (ARCH_OS_NATIVE_PRIORITY_DEFAULT)
	
    //UI显示任务优先级最高
    #define TASK_PROP_NETWORK (ARCH_OS_NATIVE_PRIORITY_DEFAULT-1)

    //故障处理任务优先级第二高
    #define TASK_PROP_ERRHAND (ARCH_OS_NATIVE_PRIORITY_DEFAULT-1)

    //UI显示任务优先级第三高
    #define TASK_PROP_DISPLAY (ARCH_OS_NATIVE_PRIORITY_DEFAULT-2)

    //底层驱动及信号检测的优先级第4
    #define TASK_PROP_DRIVER (ARCH_OS_NATIVE_PRIORITY_DEFAULT-3)

    //app逻辑处理任务的优先级排第4
    #define TASK_PROP_APP (ARCH_OS_NATIVE_PRIORITY_DEFAULT-3)

	//同IOT平台的交互,任务优先级排第5
    #define TASK_PROP_IOTTALK (ARCH_OS_NATIVE_PRIORITY_DEFAULT-4)


    //定义方便识别的 类型    
    typedef uint8_t     u8;
    typedef int8_t      s8;
    typedef uint8_t     vu8;
    typedef char        uc8;

    typedef uint16_t    u16;
    typedef int16_t     s16;
    typedef uint16_t    vu16;
    typedef int16_t     vs16;
    typedef uint16_t    uc16;

    typedef uint32_t    u32;
    typedef uint32_t    uc32;
    typedef uint32_t    vu32;
    typedef int32_t     s32;

#define UART_DISCOVER 0X01 //发现包
#define UART_RESISTER 0X81 //注册包
#define UART_BEGIN 0X02 //高速模式开始
#define UART_INTO 0X82 //高速模式进入
#define UART_STOP 0X03 //高速模式停止
#define UART_QUIT 0X83 //高速模式退出
#define UART_PLAY 0X11 //高速模式数据包
#define UART_RETURN 0X91 //高速模式数据包回包

#define UART_OTA_BEGIN 0X04 //OTA开始包
#define UART_OTA_INTO 0X84 //OTA进入包
#define UART_OTA_STOP 0XFF //OTA结束包 
#define UART_OTA_DOWNLOAD 0X12 //OTA下载数据包

#define FRONT_PORT 3 //前灯带对应输出端口 3
#define RIGHT_PORT 0 //右灯带对应输出端口 0
#define LEFT_PORT 1 //左灯带对应输出端口  1
#define CORNER_RIGHT_PORT 2 //右三角灯带对应输出端口 2
#define CORNER_LEFT_PORT 4 //左三角灯带对应输出端口 4

#define FRONT_LIGHT 122 //前灯带灯珠数量
#define AROUND_LIGHT 60 //左右灯带灯珠数量
#define CORNER_LIGHT 12 //左右三角灯灯珠数量

#define GPIO_SEG1 23
#define GPIO_SEG2 22
#define GPIO_SEG3 19
#define GPIO_SEG4 18
#define GPIO_SEG5 12

#define STATE_COMMON 0
#define STATE_PLAY 1
#define STATE_OTA 2

typedef enum
{
	OPT_NONE,//0
    OPT_POWER_TURNON, //1 开机操作
    OPT_POWER_TURNOFF, //2 关机操作
    OPT_GO_NEXT, //3 下一步
	OPT_INVALID,//4 无效操作
	NUM_APP_OPT,//5 操作枚举值
}EM_APP_OPT;

typedef enum
{
    SSP_POWER_OFF,//0 对应灯带不亮状态
    SSP_LOGO,//1 对应开机状态
    SSP_MODE_1,//2 模式1
    SSP_MODE_2,//3 模式2
    SSP_MODE_3,//4 模式3
    SSP_MODE_4,//5 模式4
    SSP_MODE_5,//6 模式5
    NUM_SYS_SSP,//7 状态枚举值
}EM_SYS_SSP; //系统状态信息

typedef struct 
{
    EM_SYS_SSP lastssp;
    EM_SYS_SSP ssp;
    EM_SYS_SSP recssp;
}ST_SYS;

typedef enum
{
    MODE_FRONT, //前灯带模式指令
    MODE_CORNER, //三角灯模式指令
    MODE_AROUND, //左右灯带模式指令
}MODE_TARGET;


typedef struct 
{
    EM_APP_OPT oepation;
    MODE_TARGET target;
}SYS_OPT_KEY;

typedef struct 
{
  void (*handle)(SYS_OPT_KEY opt);
}light_MODE; //指针函数，用于控制灯带模式切换 

typedef struct 
{
    u8 *send_data; //待发送数据内容
    u16 send_len; //待发送数据长度
    u8 send_port; //待发送数据端口
}spi_send_param; //spi口发送数据参数

typedef struct 
{
    u8 *data; //待发送数据内容
    u16 len; //待发送数据长度
}cache_param; //spi口发送数据参数

#endif